/**
 * 
 */
package br.com.skynix.tcmc.model.conta;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import org.hibernate.annotations.ForeignKey;

import br.com.skynix.tcmc.base.model.EntidadeAuditavel;
import br.com.skynix.tcmc.model.oportunidade.Ligacao;
import br.com.skynix.tcmc.model.rh.Empresa;
import br.com.skynix.tcmc.model.rh.Funcionario;

/**
 * @author davi
 * 
 */
@Entity
@Table(name = "tb_agendamento")
public class Agendamento extends EntidadeAuditavel {
	@NotNull
	@ManyToOne
	@JoinColumn(name = "id_empresa_fk", referencedColumnName = "id",
			nullable = false)
	@ForeignKey(name = "FK001_agendamento")
	private Empresa empresa;

	@ManyToOne
	@JoinColumn(name = "id_telemarketing_fk", referencedColumnName = "id",
			nullable = true)
	@ForeignKey(name = "FK002_agendamento")
	private Funcionario telemarketing;

	@ManyToOne
	@JoinColumn(name = "id_supervisor_venda_fk", referencedColumnName = "id",
			nullable = true)
	@ForeignKey(name = "FK003_agendamento")
	private Funcionario supervisorVenda;

	@ManyToOne
	@JoinColumn(name = "id_consultor_fk", referencedColumnName = "id",
			nullable = true)
	@ForeignKey(name = "FK004_agendamento")
	private Funcionario consultor;

	@NotNull
	@ManyToOne
	@JoinColumn(name = "id_ligacao_fk", referencedColumnName = "id",
			nullable = false)
	@ForeignKey(name = "FK005_agendamento")
	private Ligacao ligacao;

	@NotNull
	@Column(name = "data_hora_agendamento", nullable = false)
	private Timestamp dataHoraAgendamento;

	@NotNull
	@Column(name = "flag_confirmado", nullable = false,
			columnDefinition = "BOOLEAN DEFAULT FALSE")
	private Boolean flagConfirmado;

	@NotNull
	@Column(name = "flag_visita_consultor", nullable = false,
			columnDefinition = "BOOLEAN DEFAULT FALSE")
	private Boolean flagVisitaConsultor;

	@Column(nullable = true)
	private String observacao;

	/**
	 * @return the empresa
	 */
	public Empresa getEmpresa() {
		return empresa;
	}

	/**
	 * @param empresa the empresa to set
	 */
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	/**
	 * @return the telemarketing
	 */
	public Funcionario getTelemarketing() {
		return telemarketing;
	}

	/**
	 * @param telemarketing the telemarketing to set
	 */
	public void setTelemarketing(Funcionario telemarketing) {
		this.telemarketing = telemarketing;
	}

	/**
	 * @return the supervisorVenda
	 */
	public Funcionario getSupervisorVenda() {
		return supervisorVenda;
	}

	/**
	 * @param supervisorVenda the supervisorVenda to set
	 */
	public void setSupervisorVenda(Funcionario supervisorVenda) {
		this.supervisorVenda = supervisorVenda;
	}

	/**
	 * @return the consultor
	 */
	public Funcionario getConsultor() {
		return consultor;
	}

	/**
	 * @param consultor the consultor to set
	 */
	public void setConsultor(Funcionario consultor) {
		this.consultor = consultor;
	}

	/**
	 * @return the ligacao
	 */
	public Ligacao getLigacao() {
		return ligacao;
	}

	/**
	 * @param ligacao the ligacao to set
	 */
	public void setLigacao(Ligacao ligacao) {
		this.ligacao = ligacao;
	}

	/**
	 * @return the dataHoraAgendamento
	 */
	public Timestamp getDataHoraAgendamento() {
		return dataHoraAgendamento;
	}

	/**
	 * @param dataHoraAgendamento the dataHoraAgendamento to set
	 */
	public void setDataHoraAgendamento(Timestamp dataHoraAgendamento) {
		this.dataHoraAgendamento = dataHoraAgendamento;
	}

	/**
	 * @return the flagConfirmado
	 */
	public Boolean getFlagConfirmado() {
		return flagConfirmado;
	}

	/**
	 * @param flagConfirmado the flagConfirmado to set
	 */
	public void setFlagConfirmado(Boolean flagConfirmado) {
		this.flagConfirmado = flagConfirmado;
	}

	/**
	 * @return the flagVisitaConsultor
	 */
	public Boolean getFlagVisitaConsultor() {
		return flagVisitaConsultor;
	}

	/**
	 * @param flagVisitaConsultor the flagVisitaConsultor to set
	 */
	public void setFlagVisitaConsultor(Boolean flagVisitaConsultor) {
		this.flagVisitaConsultor = flagVisitaConsultor;
	}

	/**
	 * @return the observacao
	 */
	public String getObservacao() {
		return observacao;
	}

	/**
	 * @param observacao the observacao to set
	 */
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
}
